package com.qinglei.recoup.system.service;

import com.qinglei.recoup.common.domain.QueryRequest;
import com.qinglei.recoup.system.domain.DeptUsers;
import com.qinglei.recoup.system.domain.User;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qinglei.recoup.system.pojo.NurseWorkVO;
import com.qinglei.recoup.system.pojo.PageParam;

import java.util.List;


public interface UserService extends IService<User> {

    /**
     * 通过手机号查找用户
     *
     * @param mobile mobile
     * @return user
     */
    User findByMobile(String mobile);

    /**
     * 通过用户ID查找用户
     *
     * @param id id
     * @return user
     */
    User findById(Long id);

    /**
     * 查询用户详情，包括基本信息，用户角色，用户部门
     *
     * @param user user
     * @param pageParam queryRequest
     * @return IPage
     */
    IPage<User> findUserDetail(User user, PageParam pageParam);

    /**
     * 更新用户登录时间
     *
     * @param userId id
     */
    void updateLoginTime(Long userId) throws Exception;

    /**
     * 新增用户
     *
     * @param user user
     */
    void createUser(User user) throws Exception;

    /**
     * 修改用户
     *
     * @param user user
     */
    void updateUser(User user) throws Exception;

    /**
     * 删除用户
     *
     * @param userIds 用户 id数组
     */
    void deleteUsers(String[] userIds) throws Exception;

    /**
     * 更新个人信息
     *
     * @param user 个人信息
     */
    void updateProfile(User user) throws Exception;

    /**
     * 更新用户头像
     *
     * @param userId 用户ID
     * @param avatar   用户头像
     */
    void updateAvatar(Long userId, String avatar) throws Exception;

    /**
     * 更新用户密码
     *  @param userId 用户名
     * @param password 新密码*/
    void updatePassword(Long userId, String password) throws Exception;

    /**
     * 注册用户
     *
     * @param username 用户名
     * @param password 密码
     */
    void regist(String username, String password) throws Exception;

    /**
     * 重置密码
     *
     * @param userIds 用户集合
     */
    void resetPassword(String[] userIds) throws Exception;

    String findSubordinates(Long deptId) throws Exception;

    List<DeptUsers> findSubordinatesMap();

    /**
     * 分页查询护工
     * @param pageParam
     * @return
     */
    IPage<NurseWorkVO> pageNurse(PageParam pageParam, Integer tenantId);

    User findByWxOpenId(String openId);

}
